 1.Zookeeper是什么？
   
   Zookeeper 是⼀一个分布式协调服务的开源框架。 主要⽤用来解决分布式集群中应⽤用系统的⼀一致性问题，
例例如怎样避免同时操作同⼀一数据造成脏读的问题。分布式系统中数据存在⼀一致性的问题！！
   ZooKeeper 本质上是⼀一个分布式的⼩小⽂文件存储系统。 提供基于类似于⽂文件系统的⽬目录树⽅方式的数
据存储，并且可以对树中的节点进⾏行行有效管理理。
   ZooKeeper 提供给客户端监控存储在zk内部数据的功能，从⽽而可以达到基于数据的集群管理理。 诸
如： 统⼀一命名服务(dubbo)、分布式配置管理理(solr的配置集中管理理)、分布式消息队列
（sub/pub）、分布式锁、分布式协调等功能。
 
 2.zookeeper的架构组成
   
   Leader
   Zookeeper 集群工作的核心角色
   集群内部各个服务器器的调度者。
   事务请求（写操作） 的唯⼀一调度和处理理者，保证集群事务处理理的顺序性；对于 create，
setData， delete 等有写操作的请求，则需要统⼀一转发给leader 处理理， leader 需要决定编号、执
⾏行行操作，这个过程称为⼀一个事务。
   Follower
   处理理客户端⾮非事务（读操作） 请求，
   转发事务请求给 Leader；
   参与集群 Leader 选举投票 2n-1 台可以做集群投票。
   此外，针对访问量量⽐比较⼤大的 zookeeper 集群， 还可新增观察者⻆角⾊色。
   Observer
   观察者角色，观察 Zookeeper 集群的最新状态变化并将这些状态同步过来，其对于⾮非事务请求可
以进⾏行行独⽴立处理理，对于事务请求，则会转发给 Leader服务器器进⾏行行处理理。
   不不会参与任何形式的投票只提供⾮非事务服务，通常⽤用于在不不影响集群事务处理理能⼒力力的前提下提升集
群的⾮非事务处理理能⼒力力。增加了了集群增加并发的读请求。
   ZK也是Master/slave架构，但是与之前不同的是zk集群中的Leader不是指定而来，而是通过选举产生。
 
 3.Zookeeper 特点
   
   1).Zookeeper：一个领导者（leader:老大），多个跟随者（follower:小弟）组成的集群。
   2).Leader负责进行投票的发起和决议，更更新系统状态(内部原理)
   3).Follower用于接收客户请求并向客户端返回结果，在选举Leader过程中参与投票
   4).集群中只要有半数以上节点存活，Zookeeper集群就能正常服务。
   5).全局数据一致：每个server保存一份相同的数据副本，Client无论连接到哪个server，数据都是一致的。
   6).更新请求顺序进⾏行行(内部原理)
   7).数据更新原子性，一次数据更新要么成功，要么失败。
 
 4.Zookeeper的搭建方式
   
   Zookeeper安装方式有三种，单机模式和集群模式以及伪集群模式。
   单机模式：Zookeeper只运行在一台服务器器上，适合测试环境；
   伪集群模式：就是在一台服务器上运行多个Zookeeper 实例；
   集群模式：Zookeeper运行于一个集群上，适合⽣生产环境，这个计算机集群被称为一个“集合体”
 
 5.Zookeeper集群搭建
   
   下载
   首先我们下载稳定版本的zookeeper http://zookeeper.apache.org/releases.html
   上传
   下载完成后，将zookeeper压缩包 zookeeper-3.4.14.tar.gz 上传到linux系统/opt/lagou/software
   解压 压缩包
   tar -zxvf zookeeper-3.4.14.tar.gz -C ../servers/
   修改配置文件创建data与log目录
   #创建zk存储数据⽬目录
    mkdir -p /opt/lagou/servers/zookeeper-3.4.14/data
   #创建zk⽇日志⽂文件⽬目录
    mkdir -p /opt/lagou/servers/zookeeper-3.4.14/data/logs
   #修改zk配置文件
    cd /opt/lagou/servers/zookeeper-3.4.14/conf
   #文件改名
    mv zoo_sample.cfg zoo.cfg
	vim zoo.cfg
   #更新datadir
    dataDir=/opt/lagou/servers/zookeeper-3.4.14/data
   #增加logdir
    dataLogDir=/opt/lagou/servers/zookeeper-3.4.14/data/logs
	#增加集群配置
    ##server.服务器ID=服务器IP地址：服务器器之间通信端⼝口：服务器器之间投票选举端⼝口
     server.1=linux121:2888:3888
     server.2=linux122:2888:3888
     server.3=linux123:2888:3888
    #打开注释
    #ZK提供了自动清理事务⽇日志和快照⽂文件的功能，这个参数指定了了清理理频率，单位是⼩小时
     autopurge.purgeInterval=1
	 添加myid配置
	 1).在zookeeper的 data ⽬目录下创建一个 myid 文件，内容为1，这个⽂文件就是记录每个服务器的ID
	 cd /opt/lagou/servers/zookeeper-3.4.14/data
     echo 1 > myid
	 安装包分发并修改myid的值
	 rsync-script /opt/lagou/servers/zookeeper-3.4.14
	 修改myid值 linux122
	 echo 2 >/opt/lagou/servers/zookeeper-3.4.14/data/myid
	 修改myid值 linux123
	 echo 3 >/opt/lagou/servers/zookeeper-3.4.14/data/myid
	 依次启动三个zk实例
     启动命令（三个节点都要执行）
	 /opt/lagou/servers/zookeeper-3.4.14/bin/zkServer.sh start
	 查看zk启动情况
	 /opt/lagou/servers/zookeeper-3.4.14/bin/zkServer.sh status
	 集群启动停止脚本
	 vim zk.sh
#!/bin/sh
echo "start zookeeper server..."
if(($#==0));then
echo "no params";
exit;
fi
hosts="linux121 linux122 linux123"
for host in $hosts
do
ssh $host "source /etc/profile; /opt/lagou/servers/zookeeper-3.4.14/bin/zkServer.sh $1"
done